package cn.com.cifi.mars.util;

import java.util.ArrayList;
import java.util.List;

import lombok.extern.slf4j.Slf4j;
/**
 * 左右对比工具类
 * @author 60157
 *
 */
@Slf4j
public class CompareUtils {

	 /**
     * 计算列表aList相对于bList的增加的情况，兼容任何类型元素的列表数据结构
     * 计算右边的list有没有移除内容操作
     * @param aList 本列表
     * @param bList 对照列表
     * @return 返回增加的元素组成的列表
     */
    public static <E> List<E> getAddaListThanbList(List<E> aList, List<E> bList){
        List<E> addList = new ArrayList<E>();
        for (int i = 0; i < aList.size(); i++){
            if(!myListContains(bList, aList.get(i))){
                addList.add(aList.get(i));
            }
        }
        return addList;
    }

    /**
     * 计算列表aList相对于bList的减少的情况，兼容任何类型元素的列表数据结构
     * 计算右边的list有没有添加内容操作
     * @param aList 本列表
     * @param bList 对照列表
     * @return 返回减少的元素组成的列表
     */
    public static <E> List<E> getReduceaListThanbList(List<E> aList, List<E> bList){
        List<E> reduceaList = new ArrayList<E>();
        for (int i = 0; i < bList.size(); i++){
            if(!myListContains(aList, bList.get(i))){
                reduceaList.add(bList.get(i));
            }
        }
        return reduceaList;
    }

    /**
     * 判断元素element是否是sourceList列表中的一个子元素
     * @param sourceList 源列表
     * @param element 待判断的包含元素
     * @return 包含返回 true，不包含返回 false
     */
    private static <E> boolean myListContains(List<E> sourceList, E element) {
        if (sourceList == null || element == null){
            return false;
        }
        if (sourceList.isEmpty()){
            return false;
        }
        for (E tip : sourceList){
            if(element.equals(tip)){
                return true;
            }
        }
        return false;
    }
    
    /**
     * 测试用
     * @return
     */
	public static List<String> listA() {
		List<String>str=new ArrayList<>();
		str.add("楼栋1");
		str.add("楼栋2");
		str.add("楼栋3");
		return str;
	}
	
	 /**
     * 测试用
     * @return
     */
	public static List<String> listB() {
		List<String>str=new ArrayList<>();
		str.add("楼栋3");
		str.add("楼栋2");
		str.add("楼栋1");
		str.add("楼栋4");
		return str;
	}
	
	/*public static void main(String[] args) {
		List<String>liA=listA();
		List<String>liB=listB();
		List<String>delList=getAddaListThanbList(liA, liB);
		for (int i = 0; i < delList.size(); i++) {
			log.info("B组团移除了产品楼栋:"+delList.get(i));
		}
		log.info("=================");
		List<String>addList=getReduceaListThanbList(liA, liB);
		for (int i = 0; i < addList.size(); i++) {
			log.info("B组团添加了产品楼栋:"+addList.get(i));
		}
	}*/
	
}
